// 描述对象类型
// 1. 方式一:
// let obj: { name: string; age: number } = {
//   name: 'zs',
//   age: 18,
// }

// 2. 方式二: (不推荐,太笼统)
// let obj: object = {
//   name: 'zs',
//   age: 18,
// }

// 3. 方式三: 通过接口去定义

// ts中有一个关键字是interface.专门用来定义接口.
// 定义出来的接口,相当于就是定义出来了一个类型.完全可以把接口当做类型去使用
interface Iobj {
  // name和age必须写
  name: string
  age: number
  // 可选属性: 属性名确定,但是不确定有没有这个属性
  sex?: boolean
  // 任意属性: 属性名不确定. 注意: 一旦定义了任意属性,则无法限制对象中属性的个数
  // 注意: 任意属性的值的类型必须包含当前接口中其他属性的数据类型
  [xxx: string]: string | number | boolean

  // 只读属性: 可以初始化,并且必须初始化.但是不能修改
  readonly uuu: string
}

// let obj: Iobj

// obj = {
//   name: 'abc',
//   age: 18,
//   sex: false,
//   uuu: '888',
//   abc: false,
//   bcd: 123,
//   ooo: 888,
//   yyyy: 999,
// }

// obj.name = '123'
// obj.age = 99
// obj.abc = true

// obj.uuu = '999'

// let obj: object = new String('123')
// let obj1: Object = new Boolean(1)
